// 名前空間の定義
var koma = {};


///////////////////////////////////////
// koma.Directory: 小説家名鑑（Web-API）にアクセスするクラス
///////////////////////////////////////
(function(){
	/**
	 * constructor
	 */
	koma.Directory = function(){
	}

	/**
	 * Methods definition
	 * 
	 */
	koma.Directory.prototype = {
		index: index_,
		body: body_
	}
	
	/**
	 * ナビゲーション用のインデックスデータGET
	 * 
	 * @param {Function} callback
	 */
	function index_(callback){
		var url = "js/index.json";
		ajax_(url, callback);
	}
	
	/**
	 * 本文データのGET
	 * 
	 * @param {Number} num
	 * @param {Function} callback
	 */
	function body_(num, callback){
		var url = "js/"+num+".json";
		ajax_(url, callback);
	}
	
	/**
	 * Ajax処理を行うメソッド
	 * 
	 * @param {String} url
	 * @param {Function} callback
	 */
	function ajax_(url, callback){
		$.ajax({
			url: url,
			success: function(data){
				if(typeof(data) === "string")
					data = JSON.parse(data);
			  if(typeof(callback) === "function")	
				  callback(data);
			},
			error: function(e){
				throw e;
			}
		});
	}
})();


//////////////////////////////////////////////
// koma.Nav: ナビゲーションブロックの処理を行う
//////////////////////////////////////////////
(function(){
	
	/**
	 * constructor
	 */
	koma.Nav = function(){
		this.dir = new koma.Directory();
	}
	
	/**
	 * Methods definition.
	 *
	 */
    koma.Nav.prototype = {
		show :show_,
	}

	/**
 	 * ナビゲーションを表示する。
	 * 
	 * @param {Object} tplObj テンプレートオブジェクト
	 *  tplObj = {"pc": <pcテンプレートのセレクタ>, "smp": <スマフォテンプレートのセレクタ>}
	 * @param {String} target 出力先（selector)
	 */
  function show_(tmpl, target) {
      console.log(tmpl);
      console.log(target);
		this.dir.index(function(data){
			$(tmpl).tmpl({Datas:data}).appendTo(target);
      $(target).listview('refresh');

			$(window).trigger("navshow");				
		});
	}
	
})();

//////////////////////////////////////////////
// koma.Body: 本文ブロックの処理を行う
//////////////////////////////////////////////
(function(){
	/**
	 * Constructor
	 * 
	 */
	koma.Body = function(){
		this.dir = new koma.Directory();
	};
	
	/**
	 * Methods definition
	 */
	koma.Body.prototype = {
		show: show_,
    get: get_,
		clear: clear_
	}
	
    /**
     * 本文を表示する。
     * 
	 * @param {String} id 表示する小説家ID
	 * @param {String} テンプレートオブジェクトのセレクタ
	 * @param {String} 本文ノードのセレクタ
	 */
	function show_(id, tmpl, target) {
		this.dir.body(id, function(data){
			$(tmpl).tmpl(data).appendTo(target);
			

			$(window).trigger("bodyshow", data); // 処理が終了したことを伝える
		});
	}
	
	function get_(id) {
		this.dir.body(id, function(data){
			$(window).trigger("bodyget", data); // 処理が終了したことを伝える
		});
	}
	
	/**
	 * 本文表示を削除する
	 * @param {Object} target
	 */
	function clear_(target){
		$(target).children().remove();
	}
})();

(function(){
    koma.navi = new koma.Nav();
    koma.body = new koma.Body();

    var navTemplate = [
    "<li data-role='list-divider'>小説家</li>",
      "{{each Datas}}",
      "<li><a href='desc.html?id=${id}'>${name}</a></li>",
      "{{/each}}"].join("");
    var bodyTemplate = [
    "<div class=center>",
      "<h2>${name}</h2>",
      "<img src='${image_url}'>",
  "</div>",
      "<p>${text}</p>"].join("");


    $("div").live("pagecreate", function(){
        var dataUrl_ = $(this).attr("data-url");
        switch(dataUrl_) {
        case 'index.html':
        case '':
            var target = $(this).children('div[data-role=content]').children('ul');
            koma.navi.show("#navTemplate", target);
            break;
        default:
            if(dataUrl_.indexOf('desc.html') == 0) {
                var id = dataUrl_.substring(13);
                koma.body.show(id, ".bodyTemplate", $(this).children('div[data-role=content]').children('.body_'));
            }
            break;
        }
    });
    alert(window.applicationCache.status);
})();
